/**
 * @param {number[]} nums1
 * @param {number[]} nums2
 * @return {number[]}
 */
export var intersect = function (nums1, nums2) {
  if (nums1.length === 0 || nums2.length === 0) return []
  if (nums1.length > nums2.length) return intersect(nums2, nums1)
  const ans = []
  const set = new Set()
  for (let i = 0; i < nums1.length; i++) {
    const num = nums1[i]
    for (let j = 0; j < nums2.length; j++) {
      const num2 = nums2[j]
      if (num === num2 && !set.has(j)) {
        ans.push(num)
        set.add(j)
        break
      }
    }
  }
  return ans
}

/**
 * 排序后的
 * @param {number[]} nums1
 * @param {number[]} nums2
 * @return {number[]}
 */
export var intersect2 = function (nums1, nums2) {
  nums1.sort((a, b) => a - b)
  nums2.sort((a, b) => a - b)
  const ans = []
  let i = 0,
    j = 0
  while (i < nums1.length && j < nums2.length) {
    if (nums1[i] === nums2[j]) {
      ans.push(nums1[i])
      i++
      j++
    } else if (nums1[i] < nums2[j]) {
      i++
    } else {
      j++
    }
  }
  return ans
}
